/*********************************************************************************************************************
* COPYRIGHT NOTICE
* Copyright (c) 2018,逐飞科技
* All rights reserved.
*
* 以下所有内容版权均属逐飞科技所有，未经允许不得用于商业用途，
* 欢迎各位使用并传播本程序，修改内容时必须保留逐飞科技的版权声明。
*
* @file             zf_common_function
* @company          成都逐飞科技有限公司
* @author           逐飞科技(QQ3184284598)
* @version          查看doc内version文件 版本说明
* @Software         IAR 8.32.4 or MDK 5.28
* @Target core      MM32F3277
* @Taobao           https://seekfree.taobao.com/
* @date             2021-11-11
********************************************************************************************************************/

#ifndef _zf_common_function_h_
#define _zf_common_function_h_

#include "zf_common_typedef.h"

//====================================================宏定义函数区====================================================
//-------------------------------------------------------------------------------------------------------------------
// @brief       绝对值函数 数据范围是 [-32767,32767]
// @param       dat             需要求绝对值的数
// @return      int             返回绝对值
// Sample usage:                dat = myabs(dat);                               // 将dat变成正数
//-------------------------------------------------------------------------------------------------------------------
#define     myabs(x)            (x>=0? x: -(x))

//-------------------------------------------------------------------------------------------------------------------
// @brief       限幅 数据范围是 [-32768,32767]
// @param       x               被限幅的数据
// @param       y               限幅范围(数据会被限制在-y至+y之间)
// @return      int             限幅之后的数据         
// Sample usage:                int dat = limit(500,300);                       // 数据被限制在-300至+300之间  因此返回的结果是300
//-------------------------------------------------------------------------------------------------------------------
#define     limit(x,y)          (x>y? y: (x<-(y)? -(y): x))

//-------------------------------------------------------------------------------------------------------------------
// @brief       双边限幅 数据范围是 [-32768,32767]
// @param       x               被限幅的数据
// @param       a               限幅范围左边界
// @param       b               限幅范围右边界
// @return      int             限幅之后的数据         
// Sample usage:                int dat = limit_ab(500,-300,400);               //数据被限制在-300至+400之间  因此返回的结果是400
//-------------------------------------------------------------------------------------------------------------------
#define     limit_ab(x,a,b)     (x<a? a: (x>b? b: x))
//====================================================宏定义函数区====================================================

//=====================================================常规函数区=====================================================
uint32      get_greatest_common_divisor         (uint32 num1, uint32 num2);

void        my_delay                            (volatile long t);

int32       str_to_int                          (char *str);
uint32      str_to_uint                         (char *str);
void        int_to_str                          (char *str, int32 number);
void        uint_to_str                         (char *str, uint32 number);
float       str_to_float                        (char *str);
void        float_to_str                        (char *str, float number, uint8 point_bit);
double      str_to_double                       (char *str);
void        double_to_str                       (char *str, double number, uint8 point_bit);

uint32      zf_sprintf                          (int8 *buff, const int8 *format, ...);
//=====================================================常规函数区=====================================================

#endif
